home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / 141_01.zip / LOGON.C < prev    next >
Text File  |  1993-06-01  |  14KB  |  694 lines

  1. /* LOGON PROGRAM IN BDS C 
  2.    
  3.    r p sarna -- 19 jan 1984
  4.  
  5.    dirigo data support systems 
  6.    p o box 259
  7.    auburn, me 04210
  8.  
  9. */
  10.  
  11. #include <bdscio.h>
  12.  
  13. /* Make logon id's in memory: */
  14. char id0[11];
  15. char id1[11];
  16. char id2[11];
  17. char id3[11];
  18. char id4[11];
  19. char id5[11];
  20. char id6[11];
  21. char id7[11];
  22. char id8[11];
  23. char id9[11];
  24. char id10[11];
  25. char id11[11];
  26. char id12[11];
  27. char id13[11];
  28. char id14[11];
  29. char id15[11];
  30.  
  31. /* Make passwords in memory: */
  32. char pw0[11];
  33. char pw1[11];
  34. char pw2[11];
  35. char pw3[11];
  36. char pw4[11];
  37. char pw5[11];
  38. char pw6[11];
  39. char pw7[11];
  40. char pw8[11];
  41. char pw9[11];
  42. char pw10[11];
  43. char pw11[11];
  44. char pw12[11];
  45. char pw13[11];
  46. char pw14[11];
  47. char pw15[11];
  48.  
  49. int ptr;        /* pointer (value of)  proper user number */
  50. int unum;        /* user number */      
  51. char idin[11];        /* logon id (answer from person logging on) */ 
  52. char pwin[11];        /* password (answer from person logging on) */ 
  53. char badfile;        /* flag -- can't write out 'secret' file */
  54.  
  55. main() 
  56. {
  57.     getstuff();    /* read 'secret' file that has legal passwords */
  58.  
  59. nogood:    clear();
  60.     badfile = NO;
  61.     idin[0] = '\0';
  62.     printf("logon identification? ");     /* ask "Who's there?" */
  63.     getid();
  64.     ptr = -1;
  65.     if (strcmp(idin, id0) == 0) ptr = 0;    /* see if we know them */
  66.     else if (strcmp(idin, id1) == 0) ptr = 1;
  67.     else if (strcmp(idin, id2) == 0) ptr = 2;
  68.     else if (strcmp(idin, id3) == 0) ptr = 3;
  69.     else if (strcmp(idin, id4) == 0) ptr = 4;
  70.     else if (strcmp(idin, id5) == 0) ptr = 5;
  71.     else if (strcmp(idin, id6) == 0) ptr = 6;
  72.     else if (strcmp(idin, id7) == 0) ptr = 7;
  73.     else if (strcmp(idin, id8) == 0) ptr = 8;
  74.     else if (strcmp(idin, id9) == 0) ptr = 9;
  75.     else if (strcmp(idin, id10) == 0) ptr = 10;
  76.     else if (strcmp(idin, id11) == 0) ptr = 11;
  77.     else if (strcmp(idin, id12) == 0) ptr = 12;
  78.     else if (strcmp(idin, id13) == 0) ptr = 13;
  79.     else if (strcmp(idin, id14) == 0) ptr = 14;
  80.     else if (strcmp(idin, id15) == 0) ptr = 15;
  81.  
  82.     if (ptr < 0) goto nogood;    /* we don't know them - ask again */
  83.  
  84.     pwin[0] = '\0';            /* clean out password string */
  85.  
  86.     switch (ptr) {
  87.         case 0: {
  88.             printf("\n\npassword? ");    /* ask password */
  89.             getpw();
  90.             if (strcmp(pwin, pw0) != 0) goto nogood;
  91.             usrset( 0); 
  92.  
  93. doover:            printf("\n\nchange user number = ? (16 to save & end) ");
  94.             scanf("%d", &unum);
  95.  
  96.             switch (unum) {
  97.  
  98.                 case 0: {
  99. /* if logged in to 0; change? */    printf("\npresent logon id: '%s'", id0);
  100.                     printf("\npresent password: '%s'", pw0);
  101.                     printf("\n\nnew logon identification ? ");
  102.                     scanf("%s", idin);
  103.  
  104.                     strcpy(id0, idin);
  105.  
  106.                     printf("\nnew password = ? ");
  107.                     scanf("%s", pwin);
  108.  
  109.                     strcpy(pw0, pwin);
  110.                     goto doover;
  111.                     }
  112.  
  113.  
  114.  
  115.                 case 1: {
  116.                     printf("\npresent logon id: '%s'", id1);
  117.                     printf("\npresent password: '%s'", pw1);
  118.                     printf("\n\nnew logon identification ? ");
  119.                     scanf("%s", idin);
  120.  
  121.                     strcpy(id1, idin);
  122.  
  123.                     printf("\nnew password = ? ");
  124.                     scanf("%s", pwin);
  125.  
  126.                     strcpy(pw1, pwin);
  127.  
  128.                     goto doover;
  129.                     }
  130.  
  131.  
  132.  
  133.                 case 2: {
  134.                     printf("\npresent logon id: '%s'", id2);
  135.                     printf("\npresent password: '%s'", pw2);
  136.                     printf("\n\nnew logon identification ? ");
  137.                     scanf("%s", idin);
  138.  
  139.                     strcpy(id2, idin);
  140.  
  141.                     printf("\nnew password = ? ");
  142.                     scanf("%s", pwin);
  143.  
  144.                     strcpy(pw2, pwin);
  145.  
  146.                     goto doover;
  147.                     }
  148.  
  149.  
  150.                 case 3: {
  151.                     printf("\npresent logon id: '%s'", id3);
  152.                     printf("\npresent password: '%s'", pw3);
  153.                     printf("\n\nnew logon identification ? ");
  154.                     scanf("%s", idin);
  155.  
  156.                     strcpy(id3, idin);
  157.  
  158.                     printf("\nnew password = ? ");
  159.                     scanf("%s", pwin);
  160.  
  161.                     strcpy(pw3, pwin);
  162.  
  163.                     goto doover;
  164.                     }
  165.  
  166.  
  167.  
  168.                 case 4: {
  169.                     printf("\npresent logon id: '%s'", id4);
  170.                     printf("\npresent password: '%s'", pw4);
  171.                     printf("\n\nnew logon identification ? ");
  172.                     scanf("%s", idin);
  173.  
  174.                     strcpy(id4, idin);
  175.  
  176.                     printf("\nnew password = ? ");
  177.                     scanf("%s", pwin);
  178.  
  179.                     strcpy(pw4, pwin);
  180.  
  181.                     goto doover;
  182.                     }
  183.  
  184.  
  185.                 case 5: {
  186.                     printf("\npresent logon id: '%s'", id5);
  187.                     printf("\npresent password: '%s'", pw5);
  188.                     printf("\n\nnew logon identification ? ");
  189.                     scanf("%s", idin);
  190.  
  191.                     strcpy(id5, idin);
  192.  
  193.                     printf("\nnew password = ? ");
  194.                     scanf("%s", pwin);
  195.  
  196.                     strcpy(pw5, pwin);
  197.  
  198.                     goto doover;
  199.                     }
  200.  
  201.  
  202.  
  203.                 case 6: {
  204.                     printf("\npresent logon id: '%s'", id6);
  205.                     printf("\npresent password: '%s'", pw6);
  206.                     printf("\n\nnew logon identification ? ");
  207.                     scanf("%s", idin);
  208.  
  209.                     strcpy(id6, idin);
  210.  
  211.                     printf("\nnew password = ? ");
  212.                     scanf("%s", pwin);
  213.  
  214.                     strcpy(pw6, pwin);
  215.  
  216.                     goto doover;
  217.                     }
  218.  
  219.  
  220.                 case 7: {
  221.                     printf("\npresent logon id: '%s'", id7);
  222.                     printf("\npresent password: '%s'", pw7);
  223.                     printf("\n\nnew logon identification ? ");
  224.                     scanf("%s", idin);
  225.  
  226.                     strcpy(id7, idin);
  227.  
  228.                     printf("\nnew password = ? ");
  229.                     scanf("%s", pwin);
  230.  
  231.                     strcpy(pw7, pwin);
  232.  
  233.                     goto doover;
  234.                     }
  235.  
  236.  
  237.  
  238.                 case 8: {
  239.                     printf("\npresent logon id: '%s'", id8);
  240.                     printf("\npresent password: '%s'", pw8);
  241.                     printf("\n\nnew logon identification ? ");
  242.                     scanf("%s", idin);
  243.  
  244.                     strcpy(id8, idin);
  245.  
  246.                     printf("\nnew password = ? ");
  247.                     scanf("%s", pwin);
  248.  
  249.                     strcpy(pw8, pwin);
  250.  
  251.                     goto doover;
  252.                     }
  253.  
  254.  
  255.                 case 9: {
  256.                     printf("\npresent logon id: '%s'", id9);
  257.                     printf("\npresent password: '%s'", pw9);
  258.                     printf("\n\nnew logon identification ? ");
  259.                     scanf("%s", idin);
  260.  
  261.                     strcpy(id9, idin);
  262.  
  263.                     printf("\nnew password = ? ");
  264.                     scanf("%s", pwin);
  265.  
  266.                     strcpy(pw9, pwin);
  267.  
  268.                     goto doover;
  269.                     }
  270.  
  271.  
  272.  
  273.                 case 10: {
  274.                     printf("\npresent logon id: '%s'", id10);
  275.                     printf("\npresent password: '%s'", pw10);
  276.                     printf("\n\nnew logon identification ? ");
  277.                     scanf("%s", idin);
  278.  
  279.                     strcpy(id10, idin);
  280.  
  281.                     printf("\nnew password = ? ");
  282.                     scanf("%s", pwin);
  283.  
  284.                     strcpy(pw10, pwin);
  285.  
  286.                     goto doover;
  287.                     }
  288.  
  289.  
  290.                 case 11: {
  291.                     printf("\npresent logon id: '%s'", id11);
  292.                     printf("\npresent password: '%s'", pw11);
  293.                     printf("\n\nnew logon identification ? ");
  294.                     scanf("%s", idin);
  295.  
  296.                     strcpy(id11, idin);
  297.  
  298.                     printf("\nnew password = ? ");
  299.                     scanf("%s", pwin);
  300.  
  301.                     strcpy(pw11, pwin);
  302.  
  303.                     goto doover;
  304.                     }
  305.  
  306.  
  307.  
  308.                 case 12: {
  309.                     printf("\npresent logon id: '%s'", id12);
  310.                     printf("\npresent password: '%s'", pw12);
  311.                     printf("\n\nnew logon identification ? ");
  312.                     scanf("%s", idin);
  313.  
  314.                     strcpy(id12, idin);
  315.  
  316.                     printf("\nnew password = ? ");
  317.                     scanf("%s", pwin);
  318.  
  319.                     strcpy(pw12, pwin);
  320.  
  321.                     goto doover;
  322.                     }
  323.  
  324.  
  325.                 case 13: {
  326.                     printf("\npresent logon id: '%s'", id13);
  327.                     printf("\npresent password: '%s'", pw13);
  328.                     printf("\n\nnew logon identification ? ");
  329.                     scanf("%s", idin);
  330.  
  331.                     strcpy(id13, idin);
  332.  
  333.                     printf("\nnew password = ? ");
  334.                     scanf("%s", pwin);
  335.  
  336.                     strcpy(pw13, pwin);
  337.  
  338.                     goto doover;
  339.                     }
  340.  
  341.  
  342.  
  343.                 case 14: {
  344.                     printf("\npresent logon id: '%s'", id14);
  345.                     printf("\npresent password: '%s'", pw14);
  346.                     printf("\n\nnew logon identification ? ");
  347.                     scanf("%s", idin);
  348.  
  349.                     strcpy(id14, idin);
  350.  
  351.                     printf("\nnew password = ? ");
  352.                     scanf("%s", pwin);
  353.  
  354.                     strcpy(pw14, pwin);
  355.  
  356.                     goto doover;
  357.                     }
  358.  
  359.  
  360.                 case 15: {
  361.                     printf("\npresent logon id: '%s'", id15);
  362.                     printf("\npresent password: '%s'", pw15);
  363.                     printf("\n\nnew logon identification ? ");
  364.                     scanf("%s", idin);
  365.  
  366.                     strcpy(id15, idin);
  367.  
  368.                     printf("\nnew password = ? ");
  369.                     scanf("%s", pwin);
  370.  
  371.                     strcpy(pw15, pwin);
  372.  
  373.                     goto doover;
  374.                     }
  375.  
  376.                 case 16: {      
  377. /* dump out file: */            savestuff();
  378.                     break;
  379.                     }
  380.  
  381.                 default: goto nogood;
  382.                 }
  383.  
  384.             if (badfile == YES) goto nogood;
  385.             break;
  386.             }
  387.  
  388.         case 1: {
  389. /* for each user:   */    printf("\n\npassword? ");
  390. /* get his password */    getpw();
  391. /* if wrong, abort  */    if (strcmp(pwin, pw1) != 0) goto nogood;
  392. /* if OK set user # */    usrset( 1); 
  393. /* all done         */    break;
  394.             }
  395.  
  396.         case 2: {
  397.             printf("\n\npassword? ");
  398.             getpw();
  399.             if (strcmp(pwin, pw2) != 0) goto nogood;
  400.             usrset( 2); 
  401.             break;
  402.             }
  403.  
  404.         case 3: {
  405.             printf("\n\npassword? ");
  406.             getpw();
  407.             if (strcmp(pwin, pw3) != 0) goto nogood;
  408.             usrset( 3); 
  409.             break;
  410.             }
  411.  
  412.         case 4: {
  413.             printf("\n\npassword? ");
  414.             getpw();
  415.             if (strcmp(pwin, pw4) != 0) goto nogood;
  416.             usrset( 4); 
  417.             break;
  418.             }
  419.  
  420.         case 5: {
  421.             printf("\n\npassword? ");
  422.             getpw();
  423.             if (strcmp(pwin, pw5) != 0) goto nogood;
  424.             usrset( 5); 
  425.             break;
  426.             }
  427.  
  428.         case 6: {
  429.             printf("\n\npassword? ");
  430.             getpw();
  431.             if (strcmp(pwin, pw6) != 0) goto nogood;
  432.             usrset( 6); 
  433.             break;
  434.             }
  435.  
  436.         case 7: {
  437.             printf("\n\npassword? ");
  438.             getpw();
  439.             if (strcmp(pwin, pw7) != 0) goto nogood;
  440.             usrset( 7); 
  441.             break;
  442.             }
  443.  
  444.         case 8: {
  445.             printf("\n\npassword? ");
  446.             getpw();
  447.             if (strcmp(pwin, pw8) != 0) goto nogood;
  448.             usrset( 8); 
  449.             break;
  450.             }
  451.  
  452.         case 9: {
  453.             printf("\n\npassword? ");
  454.             getpw();
  455.             if (strcmp(pwin, pw9) != 0) goto nogood;
  456.             usrset( 9); 
  457.             break;
  458.             }
  459.  
  460.         case 10: {
  461.             printf("\n\npassword? ");
  462.             getpw();
  463.             if (strcmp(pwin, pw10) != 0) goto nogood;
  464.             usrset( 10); 
  465.             break;
  466.             }
  467.  
  468.         case 11: {
  469.             printf("\n\npassword? ");
  470.             getpw();
  471.             if (strcmp(pwin, pw11) != 0) goto nogood;
  472.             usrset( 11); 
  473.             break;
  474.             }
  475.  
  476.         case 12: {
  477.             printf("\n\npassword? ");
  478.             getpw();
  479.             if (strcmp(pwin, pw12) != 0) goto nogood;
  480.             usrset( 12); 
  481.             break;
  482.             }
  483.  
  484.         case 13: {
  485.             printf("\n\npassword? ");
  486.             getpw();
  487.             if (strcmp(pwin, pw13) != 0) goto nogood;
  488.             usrset( 13); 
  489.             break;
  490.             }
  491.  
  492.         case 14: {
  493.             printf("\n\npassword? ");
  494.             getpw();
  495.             if (strcmp(pwin, pw14) != 0) goto nogood;
  496.             usrset( 14); 
  497.             break;
  498.             }
  499.  
  500.         case 15: {
  501.             printf("\n\npassword? ");
  502.             getpw();
  503.             if (strcmp(pwin, pw15) != 0) goto nogood;
  504.             usrset( 15); 
  505.             break;
  506.             }
  507.  
  508.         }
  509.  
  510. aldone:    clear();
  511.  
  512. }
  513.  
  514.  
  515. getpw()        /* routine to get password, but print '*' on screen: */
  516. {
  517.     char cc;
  518.     int i;
  519.  
  520.     i = 0;
  521.  
  522.     do {
  523.         while (bios(2,0)) ;
  524.         cc = bios(3,0);     
  525.         putch('*');
  526.         pwin[i] = cc;
  527.         i++;
  528.         } while ((cc != '\r') && ( i < 10));
  529.  
  530.         i--;
  531.         pwin[i] = '\0';
  532.  
  533. }
  534.  
  535.  
  536. getid()        /* routine to get logon id - OK to print that */
  537. {
  538.     char cc;
  539.     int i;
  540.  
  541.     i = 0;
  542.  
  543.     do {
  544.         while (bios(2,0)) ;
  545.         cc = bios(3,0);     
  546.         putch(cc);
  547.         idin[i] = cc;
  548.         i++;
  549.         } while ((cc != '\r') && ( i < 10));
  550.  
  551.         i--;
  552.         idin[i] = '\0';
  553.  
  554. }
  555.  
  556.  
  557. savestuff()        /* routine to save 'secret' id & passwords */
  558. {
  559.     int frv;
  560.     FILE obuf;
  561.     int i;
  562.     char filename[16];
  563.  
  564. /* make 'T' in 'DTA' to a 0xD4 in order to make a 'SYS' file */
  565.     filename[0] = '0';
  566.     filename[1] = '/';
  567.     filename[2] = 'A';
  568.     filename[3] = ':';
  569.     filename[4] = 'L';
  570.     filename[5] = 'O';
  571.     filename[6] = 'G';
  572.     filename[7] = 'I';
  573.     filename[8] = 'N';
  574.     filename[9] = 'F';
  575.     filename[10] = 'O';
  576.     filename[11] = '.';
  577.     filename[12] = 'D';
  578.     filename[13] = 0xD4;    /* a 'T' with high bit set for 'sys' */
  579.     filename[14] = 'A';
  580.     filename[15] = '\0';
  581.  
  582.     frv = fcreat(filename, obuf);
  583.  
  584.     if (frv == 0) {    
  585.             printf("\n\n\nFILE ERROR");
  586.             sleep(20);
  587.             badfile = YES;
  588.             }
  589.  
  590.     for (i = 0; i <= 10; i++) {         /* XOR with 'X' to confuse: */
  591.         putc((pw0[i] ^ 'X'), obuf);    
  592.         putc((id0[i] ^ 'X'), obuf);    /* note id, pw "staggered" */
  593.         putc((pw1[i] ^ 'X'), obuf);
  594.         putc((id1[i] ^ 'X'), obuf);
  595.         putc((pw2[i] ^ 'X'), obuf);
  596.         putc((id2[i] ^ 'X'), obuf);
  597.         putc((pw3[i] ^ 'X'), obuf);
  598.         putc((id3[i] ^ 'X'), obuf);
  599.         putc((pw4[i] ^ 'X'), obuf);
  600.         putc((id4[i] ^ 'X'), obuf);
  601.         putc((pw5[i] ^ 'X'), obuf);
  602.         putc((id5[i] ^ 'X'), obuf);
  603.         putc((pw6[i] ^ 'X'), obuf);
  604.         putc((id6[i] ^ 'X'), obuf);
  605.         putc((pw7[i] ^ 'X'), obuf);
  606.         putc((id7[i] ^ 'X'), obuf);
  607.         putc((pw8[i] ^ 'X'), obuf);
  608.         putc((id8[i] ^ 'X'), obuf);
  609.         putc((pw9[i] ^ 'X'), obuf);
  610.         putc((id9[i] ^ 'X'), obuf);
  611.         putc((pw10[i] ^ 'X'), obuf);
  612.         putc((id10[i] ^ 'X'), obuf);
  613.         putc((pw11[i] ^ 'X'), obuf);
  614.         putc((id11[i] ^ 'X'), obuf);
  615.         putc((pw12[i] ^ 'X'), obuf);
  616.         putc((id12[i] ^ 'X'), obuf);
  617.         putc((pw13[i] ^ 'X'), obuf);
  618.         putc((id13[i] ^ 'X'), obuf);
  619.         putc((pw14[i] ^ 'X'), obuf);
  620.         putc((id14[i] ^ 'X'), obuf);
  621.         putc((pw15[i] ^ 'X'), obuf);
  622.         putc((id15[i] ^ 'X'), obuf);
  623.         }
  624.  
  625.     fclose(obuf);
  626.  
  627. }
  628.  
  629.  
  630. getstuff()        /* get info from 'secret' id & password file */
  631. {
  632.     int frv;
  633.     FILE ibuf;
  634.     int i;
  635.  
  636.     frv = fopen("0/A:LOGINFO.DTA", ibuf);
  637.  
  638.     if (frv == 0) {    
  639.             printf("\n\n\nFILE ERROR");
  640.             sleep(20);
  641.             badfile = YES;
  642.             }
  643.  
  644.     for (i = 0; i <= 10; i++) {     /* XOR w/ 'X' to get info back */
  645.         pw0[i] = getc(ibuf) ^ 'X';
  646.         id0[i] = getc(ibuf) ^ 'X';
  647.         pw1[i] = getc(ibuf) ^ 'X';
  648.         id1[i] = getc(ibuf) ^ 'X';
  649.         pw2[i] = getc(ibuf) ^ 'X';
  650.         id2[i] = getc(ibuf) ^ 'X';
  651.         pw3[i] = getc(ibuf) ^ 'X';
  652.         id3[i] = getc(ibuf) ^ 'X';
  653.         pw4[i] = getc(ibuf) ^ 'X';
  654.         id4[i] = getc(ibuf) ^ 'X';
  655.         pw5[i] = getc(ibuf) ^ 'X';
  656.         id5[i] = getc(ibuf) ^ 'X';
  657.         pw6[i] = getc(ibuf) ^ 'X';
  658.         id6[i] = getc(ibuf) ^ 'X';
  659.         pw7[i] = getc(ibuf) ^ 'X';
  660.         id7[i] = getc(ibuf) ^ 'X';
  661.         pw8[i] = getc(ibuf) ^ 'X';
  662.         id8[i] = getc(ibuf) ^ 'X';
  663.         pw9[i] = getc(ibuf) ^ 'X';
  664.         id9[i] = getc(ibuf) ^ 'X';
  665.         pw10[i] = getc(ibuf) ^ 'X';
  666.         id10[i] = getc(ibuf) ^ 'X';
  667.         pw11[i] = getc(ibuf) ^ 'X';
  668.         id11[i] = getc(ibuf) ^ 'X';
  669.         pw12[i] = getc(ibuf) ^ 'X';
  670.         id12[i] = getc(ibuf) ^ 'X';
  671.         pw13[i] = getc(ibuf) ^ 'X';
  672.         id13[i] = getc(ibuf) ^ 'X';
  673.         pw14[i] = getc(ibuf) ^ 'X';
  674.         id14[i] = getc(ibuf) ^ 'X';
  675.         pw15[i] = getc(ibuf) ^ 'X';
  676.         id15[i] = getc(ibuf) ^ 'X';
  677.         }
  678.  
  679.     fclose(ibuf);
  680.  
  681. }
  682.  
  683.  
  684. usrset(u)    /* routine to change which user area we're logged into */
  685. int u;
  686. {
  687.     char *addr;    /* pointer to CP/M 'user' address */
  688.  
  689.     addr = 0x0004;
  690.  
  691.     *addr = (*addr & 0x0F) + (u * 16); /* user number is left nibble */
  692.  
  693. }
  694.